package api;

import com.fasterxml.jackson.databind.ObjectMapper;
import model.User;
import model.UserDao;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {

    private ObjectMapper objectMapper=new ObjectMapper();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置请求的编码. 告诉 servlet 按照啥格式来理解请求
        req.setCharacterEncoding("utf8");
        // 设置响应的编码. 告诉 servlet 按照啥格式来构造响应

        resp.setContentType("text/html;charset=utf8");
        // 1. 读取参数中的用户名和密码
        //    注意!! 如果用户名密码包含中文, 此处的读取可能会乱码.
        String username=req.getParameter("username");
        String password=req.getParameter("password");

        if(username==null || "".equals(username)|| password==null||"".equals(password))
        {
            String html="<h3>登录失败，缺少用户名和密码</h3>";
            resp.getWriter().write(html);
            return;
        }

        // 2. 读数据库, 看看用户名是否存在, 并且密码是否匹配
        UserDao userDao=new UserDao();
        User user=userDao.selectByUaername(username);
        if(user==null)
        {
            //用户不存在
            String html="<h3>登录失败，缺少用户名或密码</h3>";
            resp.getWriter().write(html);
            return;
        }
        if(!password.equals(user.getPassword()))
        {
            //密码错误
            String html="<h3>登录失败，缺少用户名或密码</h3>";
            resp.getWriter().write(html);
            return;
        }

        // 3. 用户名密码验证通过, 登录成功, 接下来就创建会话. 使用该会话保存用户信息.
        HttpSession session= req.getSession(true);
        session.setAttribute("user",user);
        // 4.重定向，跳转到新的页面
        resp.sendRedirect("boke_list.html");
    }


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/json;charset=utf8");

        //查询会话
        HttpSession session= req.getSession(false);

        //如果会话为空
        if(session==null)
        {
            //未登录，就没有会话，返回一个新的user对象
            User user=new User();
            String respJson=objectMapper.writeValueAsString(user);
            resp.getWriter().write(respJson);
            return;
        }
        //获取对象
        User user=(User) session.getAttribute("user");
        //如果user对象为空
        if(user==null)
        {
            //同样，返回一个新的user对象
            user=new User();
            String respJson=objectMapper.writeValueAsString(user);
            resp.getWriter().write(respJson);
            return;
        }

        //确实成功取出user对象，将对象返回到响应中
        String respJson=objectMapper.writeValueAsString(user);
        resp.getWriter().write(respJson);
    }


}
